package org.litespring.beans;

import java.util.List;

/**
 * @author ChangLiang
 * @date 2020/7/21
 */
public interface BeanDefinition {

    String SCOPE_SINGLETON = "singleton";
    String SCOPE_PROTOTYPE = "prototype";
    String SCOPE_DEFAULT = "";

    String getBeanClassName();

    boolean isSingleton();
    boolean isPrototype();
    String getScope();
    void setScope(String scope);

    List<PropertyValue> getPropertyValues();

    ConstructorArgument getConstructorArgument();
    boolean hasConstructorArgumentValues();

    String getId();

    boolean hasBeanClass();
    Class<?> getBeanClass();
    Class<?> resolveBeanClass(ClassLoader classLoader) throws ClassNotFoundException;

    boolean isSynthetic();
}
